Odoo 的onchange 有些特別要注意的地方, 像是onchange會影響到的欄位都要寫入XML
就算是使用者不需要看到的欄位, 也要寫進XML然後將其隱藏
然而onchage遇上readonly就有個特性可能會讓初次接觸Odoo的人摸不著頭緒
就是當該欄位是具有唯讀屬性時, 無論你如何測試都會發現, 怎麼數值會寫不進去
這時候可能會有人選擇暴力解法, 就是直接在onchange裡直接使用SQL語法直接新增或更新
不過官方文件裡有提到, 並不建議開發者將SQL語法直接寫入方法之中, 除非萬不得已
因為這將會繞過Odoo的權限及規則控制, 容易因為開發者的一些疏忽, 便會將資料庫資料寫入錯誤的資料!
但其實Odoo一直都有提供一個屬性叫做 force_save
只要在Xml裡的唯讀欄位加入 force_save=True
那麼就算不暴力解, 也可以將其數值寫入為讀欄位之中了!
建議以後在選擇硬幹之前, 可以找找官方文件有沒有提出相關的解法